#include <iostream>
#include <fstream>
using std::cout;
using std::endl;
using std::ifstream;
using std::cerr;
//读取一个文本文件中指定下标区域内的全部数据，并且写入到一个字符串中
//将其显示出来
// read + tellg + seekg 

void test(){
    //我们希望读取位于startIndex和endIndex之间的所有的字符
    int startIndex = 0;
    int endIndex = 270;
    
    //还可以设置ate模式，省去了移动游标到末尾的过程
    ifstream ifs("test.txt", std::ios::ate);
    if(!ifs.good()){
        cerr << "the file is not found" << endl;
        return;
    }
    //首先需要判断一下当前的索引位置是否合理有效，有没有超过文件的限制
    //让文件的游标移动到文件的末尾
    //ifs.seekg(0, std::ios_base::end);
    //统计tellg的长度大小，就是文件的长度
    int end = ifs.tellg();
    cout << end << endl;
    //需要确保end > endIndex
    if(end < endIndex){
        cerr << "当前文件长度不足" << endl;
        return;
    }
    //此时在读取文件的数据之前，还需要再次将游标移动到需要读取的起始游标位置
    ifs.seekg(startIndex);
    //此时从startIndex开始读取，读取20个字符结束
    //读到哪呢？读取到一个数组中
    char * array = new char[endIndex - startIndex + 1]();
    ifs.read(array, (endIndex - startIndex));
    cout << array << endl;
    delete [] array;
}

int main()
{
    test();
    return 0;
}

